import {acceptHMRUpdate, defineStore} from 'pinia';

interface BasicUserInfo {
    [key: string]: any;

    /**
     * 头像
     */
    avatar: string;
    /**
     * 用户昵称
     */
    realName: string;
    /**
     * 用户角色
     */
    roles?: string[];
    /**
     * 用户id
     */
    userId: string;
    /**
     * 用户名
     */
    username: string;
}

interface AccessState {
    /**
     * 用户信息
     */
    userInfo: BasicUserInfo | null;
    /**
     * 用户角色
     */
    userRoles: string[];
}

/**
 * @zh_CN 用户信息相关
 */
export const useUserStore = defineStore('core-user', {
    actions: {
        setUserInfo(userInfo: BasicUserInfo | null) {
            // 设置用户信息
            this.userInfo = userInfo;
            // 设置角色信息
            const roles = userInfo?.roles ?? [];
            this.setUserRoles(roles);
        },
        setUserRoles(roles: string[]) {
            this.userRoles = roles;
        },
    },
    state: (): AccessState => ({
        userInfo: null,
        userRoles: [],
    }),
});

// 解决热更新问题
const hot = import.meta.hot;
if (hot) {
    hot.accept(acceptHMRUpdate(useUserStore, hot));
}
